import utils from '@/utils'

// 输入框不填内容, 默认是 typeof value === 'string' , value===''

// 通用校验器
export var validates = function(rule, value, callback) {
  // 判断 required, type, range(范围, 如果是string 判断长度, 如果是number 判断范围)
  // 正则
  // eslint-disable-next-line no-unused-vars
  var required = rule.required || false
  var fieldName = rule.name || '此字段'
  var type = rule.type || 'string' // 没有规定类型, 默认是string
  var typeEnum = { // 类型枚举
    'string': '字符串',
    'number': '数字'
  }
  if (required) { // 必填
    if (value === '') { // 没有填
      return callback(new Error('必须输入' + fieldName))
    }
  } else { // 非必填
    if (value === '') { // 没有填
      return callback()
    }
  }
  // eslint-disable-next-line valid-typeof
  if (typeof (value) !== type) { // 没有定义类型
    return callback(new Error('请输入' + typeEnum[type]))
  }
  // console.log(value === '')
  // console.log(typeof value)
  // 判断必填
  if (rule.required && value === '') { // 必填, 而且没有填
    return callback(new Error(rule.message))
  }
  if (!rule.required && value === '') { // 不是必填, 而且没有填
    return callback()
  }

  if (utils.isNumber(rule.min) && value < rule.min) {
    return callback(new Error('不能小于' + rule.min))
  }
  if (utils.isNumber(rule.max) && value > rule.max) {
    return callback(new Error('不能大于' + rule.max))
  }
  console.log(rule.min, rule.max)
  return callback()
}

// 字符串的验证器
export var validateString = function(rule, value, callback) {
  var required = rule.required || false
  var fieldName = rule.name || '此字段'
  if (required) { // 必填
    if (value === '') { // 没有填
      return callback(new Error('必须输入' + fieldName))
    }
  } else { // 非必填
    if (value === '') { // 没有填
      return callback()
    }
  }
  if (typeof (value) !== 'string') {
    return callback(new Error('请输入字符串'))
  }
  if (utils.isNumber(rule.min) && value.length < rule.min) {
    return callback(new Error('字符串长度不能小于' + rule.min))
  }
  if (utils.isNumber(rule.max) && value.length > rule.max) {
    return callback(new Error('字符串长度不能大于' + rule.max))
  }
}

// 关联数据校验器
export var validateuserName = (rule, value, callback) => {
  if (value) { return callback() }
  var userNameReg = /^[\u4E00-\u9FA5]+$/ // 中文
  if (rule.vm.ruleForm.region === 'china' && !userNameReg.test(value)) {
    callback(new Error('如果是中国地区,用户名只能为中文'))
  } else {
    callback()
  }
}

// 数字校验器
export var validateNumber = function(rule, value, callback) {
  // rule: { validator: validateNumber, required: true, name: '年龄', type: 'number', min: 18, max: 60 }
  // 初始化 默认值
  // var type = 'number' // 类型是 number
  // var typeDesc = '数字'
  var required = rule.required || false
  var fieldName = rule.name || '此字段'
  if (required) { // 必填
    if (value === '') { // 没有填
      return callback(new Error('必须输入' + fieldName))
    }
  } else { // 非必填
    if (value === '') { // 没有填
      return callback()
    }
  }
  if (typeof (value) !== 'number') {
    return callback(new Error('请输入数字'))
  }
  // 判断范围
  if (utils.isNumber(rule.min) && value < rule.min) {
    return callback(new Error('不能小于' + rule.min))
  }
  if (utils.isNumber(rule.max) && value > rule.max) {
    return callback(new Error('不能大于' + rule.max))
  }
  return callback()
}

export default {
  validateuserName,
  validateString
}
